#include <iostream>
#include <thread>
#include <string>
#include <fstream>
#include <mutex>  //使用互斥对象std::mutex协调资源的使用

std::mutex mu;


void shared_print(std::string msg, int id){
    //使用资源前先锁住，使用后解锁
    //两个线程同时使用cout的情况将不会发生，只要他们都是使用shared_print()函数来打印的
    //但是在使用过程中报错则会一直锁住，所以不推荐直接lock，见P3_2  std::lock_guard
    mu.lock();
    std::cout << msg << id << std::endl;
    mu.unlock();

}

void function_1() {
    for (int i = 0; i < 100 ; i++)
    {
        shared_print("from t1:", i);
    }
}


int main() {
    std::thread t1(function_1);
    for (int i = 0; i < 100; i++)
    {
        shared_print("from main:", i);
    }
    
    t1.join();
    return 0;
}